home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / SAT / Collision][ ƒ / sMrEgghead][.p < prev   
Encoding:
Text File  |  1994-07-26  |  1.7 KB  |  74 lines  |  [TEXT/PJMM]

  1. { Player sprite for SATcollision][ }
  2.  
  3. unit sMrEgghead;
  4.  
  5. interface
  6.  
  7.     uses
  8.         SAT;
  9.  
  10.     var
  11.         mrEggheadFaces: array[0..3] of FacePtr;
  12.         yuckFace: FacePtr;
  13.  
  14.     procedure InitMrEgghead;
  15.     procedure SetupMrEgghead (me: SpritePtr);
  16.     procedure HandleMrEgghead (me: SpritePtr);
  17.     procedure HitMrEgghead (me, him: SpritePtr);
  18.  
  19. implementation
  20.  
  21.     procedure InitMrEgghead;
  22.         var
  23.             i: integer;
  24.     begin
  25.         for i := 0 to 3 do
  26.             mrEggheadFaces[i] := GetFace(128 + i);
  27.         yuckFace := GetFace(134);
  28.     end;
  29.  
  30.     procedure SetupMrEgghead (me: SpritePtr);
  31.     begin
  32.         me^.mode := 0;
  33.         me^.speed.h := 1;
  34.         me^.kind := 1; {Friend kind}
  35.         SetRect(me^.hotRect, 0, 0, 32, 32);
  36.         me^.task := @HandleMrEgghead;
  37.         me^.hitTask := @HitMrEgghead;
  38.     end;
  39.  
  40.     procedure HandleMrEgghead (me: SpritePtr);
  41.     begin
  42.         GetMouse(me^.position);
  43.  
  44. {This time, let's make sure Mr Egghead is always visible!}
  45.         if me^.position.v < 0 then
  46.             me^.position.v := 0;
  47.         if me^.position.h < 0 then
  48.             me^.position.h := 0;
  49.         if me^.position.v > gSAT.offSizeV - 32 then
  50.             me^.position.v := gSAT.offSizeV - 32;
  51.         if me^.position.h > gSAT.offSizeH - 32 then
  52.             me^.position.h := gSAT.offSizeH - 32;
  53.  
  54.         if me^.mode < 0 then {we have taken a bite in a bad apple recently}
  55.             begin
  56.                 me^.face := yuckFace;
  57.                 me^.mode := me^.mode + 1;
  58.             end
  59.         else if me^.mode = 0 then {nothing special recently}
  60.             me^.face := mrEggheadFaces[2]
  61.         else
  62.             begin {ate an apple recently - chew!}
  63.                 me^.mode := me^.mode - 1;
  64.                 me^.face := mrEggheadFaces[me^.mode mod 4];
  65.             end;
  66.     end;
  67.  
  68.     procedure HitMrEgghead;
  69.     begin
  70. {Hit something! We can take whatever action we need here, but in this case, we let sApple decide.}
  71. {(We could have omitted this function altogether and passed nil.)}
  72.     end;
  73.  
  74. end.